package com.priox.sigar.jsf;

import com.mm.support.mapper.DTOMapperService;
import com.priox.sigar.application.mappers.GrupoEmpresarialMapper;
import com.priox.sigar.application.mappers.SociedadMapper;
import com.priox.sigar.application.mappers.TipoCambioMapper;
import com.priox.sigar.application.sociedad.RegistroSociedadApp;
import com.priox.sigar.application.sociedad.RegistroTipoCambioApp;
import com.priox.sigar.client.dto.GrupoEmpresarialDTO;
import com.priox.sigar.client.dto.MonedaDTO;
import com.priox.sigar.client.dto.SociedadDTO;
import com.priox.sigar.client.dto.TipoCambioDTO;
import com.priox.sigar.client.flt.SociedadFlt;
import com.priox.sigar.client.flt.TipoCambioFlt;
import com.priox.sigar.domain.model.Sociedad;
import com.priox.sigar.domain.model.TipoCambio;
import com.priox.sigar.jsf.util.FindCrudBeanBase;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.event.CloseEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;


@ManagedBean
@Scope("session")
@Component
public class MaestroTipoCambioJsfBean extends FindCrudBeanBase {

    TipoCambioFlt filtroBusqueda;
    TipoCambioDTO nuevoRegistro;
    MonedaDTO nuevaMoneda;
    List<TipoCambioDTO> registros = new ArrayList<TipoCambioDTO>();


    @Autowired
    TipoCambioMapper tipoCambioMapper;

    @Autowired
    DTOMapperService mapperService;

    @Autowired
    RegistroTipoCambioApp registroTipoCambioApp;

    @PostConstruct
    public void init() {
        filtroBusqueda = new TipoCambioFlt();
        nuevoRegistro= new TipoCambioDTO();
        findRegistros();
    }

    /*Métodos de herencia*/

    @Override
    public void setCursorTableNull() {

    }

    @Override
    public void onNewRecord(ActionEvent actionEvent) {
        setUpdateMode(false);
        nuevoRegistro = new TipoCambioDTO();
        nuevoRegistro.setMonedas(tipoCambioMapper.findAllMonedas());
        Calendar inputText=(Calendar)findComponent("inputFecha");
        inputText.setDisabled(false);

    }
    @Override
    public void onShowEditDialog(ActionEvent actionEvent) {
        setUpdateMode(true);
        setPersistMode(true);
        nuevoRegistro=registroTipoCambioApp.findById(nuevoRegistro.getFecha());
        Calendar inputText=(Calendar)findComponent("inputFecha");
        inputText.setDisabled(true);

    }

    @Override
    public void onFind(ActionEvent actionEvent) {
        findRegistros();
    }

    public void findRegistros() {
        registros.clear();
        registros= tipoCambioMapper.findByFilter(filtroBusqueda);
        if (registros.size() == 0) {
            addMessage(noRecordFoundMsg, FacesMessage.SEVERITY_INFO);
        }
    }

    @Override
    public void onClean(ActionEvent actionEvent) {
        registros = new ArrayList<TipoCambioDTO>();
        nuevoRegistro= new TipoCambioDTO();
        filtroBusqueda = new TipoCambioFlt();
    }

    @Override
    public void onPersist(ActionEvent actionEvent) {
        List<TipoCambio> result = new ArrayList<TipoCambio>();
        nuevoRegistro.validar();
        result.addAll(nuevoRegistro.generarTipoCambio());
        registroTipoCambioApp.save(result ,updateMode);
    }

    @Override
    public void onDelete(ActionEvent actionEvent) {
        registroTipoCambioApp.delete(nuevoRegistro.getFecha());
    }

    @Override
    protected void onDialogClose(CloseEvent event) {
        nuevoRegistro = new TipoCambioDTO();
    }




    /*Getters and Setters*/

    public TipoCambioFlt getFiltroBusqueda() {
        return filtroBusqueda;
    }

    public void setFiltroBusqueda(TipoCambioFlt filtroBusqueda) {
        this.filtroBusqueda = filtroBusqueda;
    }

    public TipoCambioDTO getNuevoRegistro() {
        return nuevoRegistro;
    }

    public void setNuevoRegistro(TipoCambioDTO nuevoRegistro) {
        this.nuevoRegistro = nuevoRegistro;
    }

    public List<TipoCambioDTO> getRegistros() {
        return registros;
    }

    public void setRegistros(List<TipoCambioDTO> registros) {
        this.registros = registros;
    }


    public MonedaDTO getNuevaMoneda() {
        return nuevaMoneda;
    }

    public void setNuevaMoneda(MonedaDTO nuevaMoneda) {
        this.nuevaMoneda = nuevaMoneda;
    }
}
